import showMsg from '@/utils/showMsg.js'	//导入了一个模块（应该是用于显示消息的工具函数）
import { Basic, OptionType } from "./types/index"	//从 ./types/index 导入了类型定义，Basic 可能是基本的返回数据结构，OptionType 是请求参数的类型定义。
export const baseURL = 'https://sxg123.cn' //公共api地址
// export const baseURL = 'http://localhost:9100/user/' //公共api地址
// export const picBaseUrl = 'https://47.93.101.10/' //图片加载地址
export const picBaseUrl = 'https://sxg123.cn/' //图片加载地址
function RequestHttp<R = Basic>(options : OptionType) : Promise<R> {
	const { url, method, data, timeout, headers } = options
	return new Promise((resolve, reject) => {
		uni.request({
			url: baseURL + url, //接口地址：前缀+方法中传入的地址
			method: method || 'GET', //请求方法：传入的方法或者默认是“GET”
			data: data || {}, //传递参数：传入的参数或者默认传递空集合
			timeout: timeout || 30 * 1000, //接口请求超时时间设置
			header: {
				'Authorization': '',
				'X-AUTH-CLIENT': '',
				'source-client': 'miniapp',
				'content-type': headers ? headers['content-type'] : 'application/json;charset=UTF-8'
			},
			success(res : UniApp.RequestSuccessCallbackResult) {
				const { code, msg, data } = res.data as Basic & { data: R}
				if (code === 0) {
					resolve(data)
				} else {
					showMsg.Toast(msg, 'none', 3000)
				}
			},
			fail(err : UniApp.GeneralCallbackResult) {
				if (err.errMsg.includes('timeout') === true) {
					showMsg.Toast('请求超时,请稍后重试', 'none', 3000)
					reject('请求超时,请稍后重试!')
				} else {
					showMsg.Toast('请求出错')
					reject(err)
				}
			},
			complete(res : UniApp.GeneralCallbackResult) {
				// uni.hideLoading();
			}
		});
	});
}
export default RequestHttp